/*
 * @lc app=leetcode.cn id=557 lang=java
 *
 * [557] 反转字符串中的单词 III
 *
 * https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/description/
 *
 * algorithms
 * Easy (68.05%)
 * Likes:    125
 * Dislikes: 0
 * Total Accepted:    31.9K
 * Total Submissions: 46.8K
 * Testcase Example:  '"Let\'s take LeetCode contest"'
 *
 * 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 *
 * 示例 1:
 *
 *
 * 输入: "Let's take LeetCode contest"
 * 输出: "s'teL ekat edoCteeL tsetnoc" 
 *
 *
 * 注意：在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
 *
 */

// @lc code=start
class Solution {
    public String reverseWords(String s) {
        StringBuilder sb = new StringBuilder(s);
        int left = 0, right = 0;
        for(int i=0; i<sb.length(); i++) {
            if(sb.charAt(i) == ' ') {
                right = i-1;
                reverseWord(sb, left, right);
                left = i+1;
            }
        }
        reverseWord(sb, left, sb.length()-1);
        return sb.toString();
    }

    void reverseWord(StringBuilder s, int left, int right) {
        while(left < right) {
            char c = s.charAt(right);
            s.setCharAt(right, s.charAt(left));
            s.setCharAt(left, c);
            left++;
            right--;
        }
    }

}
// @lc code=end

